/*
 * UVa 1587
 * 盒子
 */
// 给定 6 个矩形的长和宽 wi 和 hi（1 <= wi，hi <= 10000），
// 判断它们能否构成长方体的 6 个面。
/*
输入样例：
1345 2584
2584 683
2584 1345
683 1345
683 1345
2584 683
1234 4567
1234 4567
4567 4321
4322 4567
4321 1234
4321 1234
输出样例：
POSSIBLE
IMPOSSIBLE
*/

// 法一：
// 六个矩形，
// 1.两个相同的矩形为一组，可分为 3 组。
// 2.成功分组后，有 6 个数据
//   x1, y1, x2, y2, x3, y3。
//   若 x1 等于除了 y1 以外的数据，则匹配成功，以此类推。
//   每个数据只能匹配一次，同组的 x 和 y 不能匹配。
//   最终有 3 次成功匹配。
// 同时满足 1,2，则 POSSIBLE。
// #include <iostream>
// #include <fstream>
// #define LOCAL
// using namespace std;
// int main()
// {
// #ifdef LOCAL
//     ifstream cin("in.txt");
//     ofstream cout("out.txt");
// #endif
//     int rec[6][2]; // 六个矩形
//     while (true)
//     {
//         // 输入
//         for (int i = 0; i < 6; i++)
//         {
//             cin >> rec[i][0] >> rec[i][1];
//             if (!cin)
//                 return 0;
//             // 保证 rec[i][0] < rec[i][1]，后面有用。
//             if (rec[i][0] > rec[i][1])
//                 swap(rec[i][0], rec[i][1]);
//         }
//         // 1.分组
//         int cnt = 0,           // 组数
//             group[3][2] = {0}; // 3 组矩形
//         int i = 0, j = 1;      // i 和 j 为双指针
//         while (i != 6 && j != 6)
//         {
//             if (rec[i][0] == 0)
//             {
//                 // 第 i 个矩形已经组队
//                 ++i;
//                 j = i;
//             }
//             else if (rec[i][0] == rec[j][0] &&
//                      rec[i][1] == rec[j][1])
//             {
//                 // 第 i 个矩形和第 j 个可以组队
//                 group[cnt][0] = rec[i][0];
//                 group[cnt][1] = rec[i][1];
//                 // 组队后将原数据销毁，标记为 0
//                 rec[i][0] = rec[j][0] = 0;
//                 ++cnt; // 组数+1
//                 ++i;
//                 j = i;
//             }
//             ++j;
//         }
//         if (cnt != 3)
//             cout << "IMPOSSIBLE" << endl;
//         else
//         {
//             // 2.匹配
//             // 分组后，六个数据应该两两相等。
//             // 用异或检查。
//             // 异或运算特点：0^a = a, a^a = 0
//             int CheckXor = 0;
//             for (int i = 0; i < 3; i++)
//                 for (int j = 0; j < 2; j++)
//                     CheckXor ^= group[i][j];
//             if (CheckXor != 0)
//                 cout << "IMPOSSIBLE" << endl;
//             else
//             {
//                 // 再检查两两相等的数据是否来自同一个矩形，
//                 // 即检查是否有正方形。
//                 int cnt = 0;       // 组数：正方形
//                 bool flag = false; // flag 为 true 表示 POSSIBLE
//                 for (int i = 0; i < 3; i++)
//                     if (group[i][0] == group[i][1])
//                         ++cnt;
//                 switch (cnt)
//                 {
//                 case 0:
//                     // 没有正方形。
//                     // 结合刚才的异或检查可知，
//                     // 匹配成功！！
//                     flag = true;
//                     break;
//                 case 1:
//                     // 只有一组正方形。
//                     // 结合刚才的异或检查，
//                     // 可推出其余两组矩形相同。
//                     // 只要该正方形的边等于其余矩形的长或宽，
//                     // 就能 POSSIBLE
//                     if (group[0][1] == group[1][1] &&
//                             group[1][1] == group[2][1] ||
//                         group[0][0] == group[1][0] &&
//                             group[1][0] == group[2][0])
//                         flag = true;
//                     break;
//                 case 3:
//                     // 全是正方形。
//                     // 那么只有当全部数据都相等，
//                     // 才能 POSSIBLE
//                     if (group[0][0] == group[1][0] &&
//                         group[1][0] == group[2][0])
//                         flag = true;
//                     break;
//                 default:
//                     break;
//                 }
//                 if (flag)
//                     cout << "POSSIBLE" << endl;
//                 else
//                     cout << "IMPOSSIBLE" << endl;
//             }
//         }
//     }
//     return 0;
// }

// 法二：
// 有 12 个数据，
// 4 个相同的、不同时出现在一个矩形中的数据为一组，
// 若能分成 3 组，则 POSSIBLE。
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define LOCAL
using namespace std;
bool cmp(const vector<int> &r1, const vector<int> &r2)
{
    // 比较函数
    // 按照 x 升序排序，
    // 如果 x 相等再按照 y 升序排序
    if (r1.at(0) != r2.at(0))
        return r1.at(0) < r2.at(0);
    return r1.at(1) < r2.at(1);
}
int main()
{
#ifdef LOCAL
    ifstream cin("in.txt");
    ofstream cout("out.txt");
#endif
    vector<vector<int>> r(6); // 六个矩形
    while (true)
    {
        // 输入
        int tmp0, tmp1;
        for (int i = 0; i < 6; i++)
        {
            cin >> tmp0 >> tmp1;
            if (!cin)
                return 0;
            // 保证 tmp0 < tmp1，将其加入矩形
            if (tmp0 > tmp1)
                swap(tmp0, tmp1);
            auto beg = r.at(i).cbegin();
            r.at(i).insert(beg, {tmp0, tmp1});
        }
        // 排序
        sort(begin(r), end(r), cmp);
        // 一列一列地找，
        // 找 4 个不在同一矩形的大小相等的数据
        // 看看能不能分成 3 组
        int cnt = 0,    // 数据在不同矩形中出现次数
            Temp_value, // 临时变量
            amount = 0; // 组数
        for (int j = 0; j < 2; j++)
            for (int i = 0; i < 6; i++)
            {
                if (cnt == 0)
                    Temp_value = r.at(i).at(j);
                if (r.at(i).at(j) == Temp_value)
                    if (++cnt == 4)
                    {
                        // 4 个一组
                        cnt = 0; // cnt 归零
                        ++amount;
                    }
            }
        if (amount == 3)
            cout << "POSSIBLE" << endl;
        else
            cout << "IMPOSSIBLE" << endl;
    }
    return 0;
}